﻿using System;

namespace Useful.GUI
{
    public class GuiException : ApplicationException
    {
        public GuiException()
        {
        }

        public GuiException(string message)
            : base(message)
        {
        }

        public GuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class DbGuiException : GuiException
    {
        public DbGuiException(string message)
            : base(message)
        {
        }

        public DbGuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class FileGuiException : GuiException
    {
        public FileGuiException(string message)
            : base(message)
        {
        }
    }

    public class IncorrectDataGuiException : GuiException
    {
        public IncorrectDataGuiException(string message)
            : base(message)
        {
        }

        public IncorrectDataGuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class IndexOutOfRangeGuiException : IncorrectDataGuiException
    {
        public IndexOutOfRangeGuiException(string message) : base(message)
        {
        }
    }

    public class ArgumentOutOfRangeGuiException : IncorrectDataGuiException
    {
        public ArgumentOutOfRangeGuiException(string message)
            : base(message)
        {
        }

        public ArgumentOutOfRangeGuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class NullReferenceGuiException : GuiException
    {
        public NullReferenceGuiException(string message)
            : base(message)
        {
        }
    }


    public class LoginGuiException : GuiException
    {
        public LoginGuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }

        public LoginGuiException(string message, string userName)
            : base(String.Format("{0} : для логина: '{1}'", message, userName))
        {
        }

        public LoginGuiException(string message, string userName, Exception innerException)
            : base(String.Format("{0} : для логина: '{1}'", message, userName), innerException)
        {
        }
    }

    public class ConnectLoginGuiException : LoginGuiException
    {
        public ConnectLoginGuiException(string message, string userName, Exception innerException)
            : base(String.Format("{0} : для логина: '{1}' причина: '{2}'", message, userName, innerException.Message), innerException)
        {
        }
    }

    public class UpdateGuiException : GuiException
    {
        public UpdateGuiException(string message)
            : base(message)
        {
        }
    }

    public class NotImplementedGuiException : GuiException
    {
    }

    public class NotSupportedGuiException : GuiException
    {
    }

    public class IncorrectDataDbGuiException : DbGuiException
    {
        public IncorrectDataDbGuiException(string message)
            : base(message)
        {
        }
    }

    public class SystemGuiException : DbGuiException
    {
        public SystemGuiException(string message)
            : base(message)
        {
        }

        public SystemGuiException(string message, Exception innerException)
            : base(message, innerException)
        {
        }
    }

    public class ProgressGuiException : GuiException
    {
        public TimeSpan TimeElapsed;

        protected ProgressGuiException(string msg, Exception ex)
            : base(msg, ex)
        {
        }

        public ProgressGuiException(Exception ex)
            : this("", ex)
        {
        }

        public ProgressGuiException(Exception ex, TimeSpan ts)
            : this(ex)
        {
            TimeElapsed = ts;
        }
    }

    public class CanceledProgressGuiException : ProgressGuiException
    {
        public CanceledProgressGuiException(Exception ex)
            : base("Действие было прервано", ex)
        {
        }
    }
}
